package org.zjt.book

/**
  * 同名Class和Object的关系
  */
class Account (private var balance :Double){

  // TODO:  id初始化时候调用Object中的变量
  var id = Account.createId
  def desc = println("id: "+id)

}

/**
  * 只是唯一的一个实例
  * 相当于static方法，只初始化一次，都是同一个对象。
  */
object Account{
  private var increment = 0
  def createId = { increment += 1 ; increment }

  def apply(increment : Int, banlance :Double) : Account= { this.increment = increment ; new Account(banlance) }
}


object StartAccount extends App{

  //实例化调用static中的变量  id初始化时候调用Object中的变量
  var account = new  Account(0.0)
  account.desc
  account = new  Account(0.0)
  account.desc

  // Account  Object是同一个实例，相当于static对象。
  println(Account)
  println(Account)
  println(Account.createId)

  // Account() Object.apply() 用来得到对象的实例
  account =  Account(0,0.5)
  account.desc

}
